[アップデート]ECS TaskにIAMロールを付与することができるようになりました
コンニチハ、千葉です。
ECSにアップデートがありました!
今までECS TaskでIAMロールを利用する場合は、EC2インスタンスに付与したIAMロールを利用していました。この場合、EC2上で動くコンテナは共通のIAMロールを利用する必要がありました。つまり、Task(コンテナ単位)でのロール割当は行えませんでした。
今回のアップデートで、ECS上のTask(コンテナ)単位でIAMロールを付与できるようになりました。これにより、Taskに対して最小限の権限を付与することができます。
環境
以下で試してみました。
- ECSの環境はGet startedから作成
- EC2に付与されているIAMロールの権限を削除
- ECS Task用のIAMロールの作成
- EC2にログイン、コンテナ上でS3にアクセスしてみる
やってみた
ECS環境の作成
まずは、ECS環境を構築します。Get startedより、キーペア以外は全てデフォルトで作成しました。
ECSに付与されているIAMロールを確認します。ECSに関する権限のみであることを確認します。後で、ECSのtask側に権限付与することでアクセス可能かを試します。
ECS Task用のIAMロールの作成
ECS Task用のIAMロールを作成します。作成時、ロールタイプにAmazon EC2 Container Service Task Role
を選びます。
また、ポリシーにはAmazonS3FullAccess
をアタッチしておきます。
ECS TaskにIAMロールをアタッチ
Task Definitions > console-sample-app-static > Create new revision を選択します。Task Roleが選択できるようになっているので選択します。
Cluster > default > sample-webapp > Update より、Task Definitionで先ほど作成したrevisionを選択します。
これで設定は終わりです。
コンテナからS3へアクセス可能か試してみた。
EC2にログインし、さらにコンテナ上からS3へアクセス可能か確認してみます。
まずは、コンテナにログインしてAWS CLIをインストールします。
$ ssh -i ~/.ssh/chiba-key.pem [email protected] $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f2f349839a9f httpd:2.4 "sh -c '/bin/sh -c \"e" About a minute ago Up About a minute 0.0.0.0:80->80/tcp ecs-console-sample-app-static-7-simple-app-92d3f8bcf9c69e945d00 442f92a35aff amazon/amazon-ecs-agent:latest "/agent" 2 minutes ago Up 2 minutes ecs-agent $ docker exec -it f2f349839a9f /bin/bash $ apt-get update -y $ apt-get install -y curl unzip python $ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip $ ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws $ aws --version aws-cli/1.10.48 Python/2.7.9 Linux/4.4.14-24.50.amzn1.x86_64 botocore/1.4.38
※注意事項:以下のSDKバージョンを満たす必要があります。
AWS CLI: 1.10.47 C++: 0.12.19 CoreCLR: 3.2.6-beta GO: 1.2.5 Java: 1.11.16 .NET: 3.1.6 Node.js: 2.4.7 PHP: 3.18.28 Ruby: 2.3.22
では、S3バケット一覧を取得してみます。
$ aws s3 ls 2016-04-05 23:50:20 XXXX 2016-05-06 16:13:04 XXXX ・・・
取得できました!
さいごに
ECSも機能がどんどん追加されており、今回はセキュリティ部分の追加となります。今まではEC2側で権限を制御するひつようがありましたが、今回のアップデートによりTask単位での権限制御が可能となりました。将来的にEC2を利用する感覚で、コンテンを利用する日が近づいている気がします。今後の追いかけます!